package livret.modele;


import java.io.File;
import java.io.IOException;
import java.sql.*;
import java.util.Scanner;

/**
 * Cette classe permet d'établir une connexion avec la base de données
 * C'est elle qui charge le pilote, ouvre la connexion et crée les statements
 * @author Solohery RAMANANARIVO, Fawzia CHABOUNI, Luc RABARIJAONA
 */
public class DataBase {

  protected static final String DRIVER_NAME = "org.postgresql.Driver";
  protected static final String URL = "jdbc:postgresql://localhost:5432/miage";
  protected static final String USER = "postgres";
  protected static final String PASSWORD = "postgres";

  public enum SortOrder {

    ASC, DESC;
  }


  static {
     /*Chargement du pilote, il se fait une seule fois*/

    try {
            Class.forName(DRIVER_NAME).newInstance();
            System.out.println("*** Driver loaded.");
    }
    catch (ClassNotFoundException e) {
            System.err.println("*** ERROR: Driver " + DRIVER_NAME + " not found");
    }
    catch (InstantiationException e) {
            System.err.println("*** ERROR: Impossible to create an instance of " + DRIVER_NAME);
            System.err.println(e.getMessage());
    }
    catch (IllegalAccessException e) {
            System.err.println("*** ERROR: Impossible to create an instance of " + DRIVER_NAME);
            System.err.println(e.getMessage());
    }
  }

  /** Fournit une connexion à la base de données
   * (ne changerait rien à l'appel de la méthode)
   * @throws java.sql.SQLException
   */
  public static Connection getConnection() throws SQLException {
    return DriverManager.getConnection(URL, USER, PASSWORD);
  }



  /** Ferme une connexion, si elle est non null.
   * Si une exception SQLException est levée, ne la propage pas.
   */
  public static void close(final Connection cx) throws SQLException {
    if (cx != null) {
      try {
            cx.close();
      }
      catch (SQLException exc) {
            System.err.println("Impossible to close connection");
            System.err.println(exc.getMessage());
      }
    }
  }

  /** Ferme une requète SQL, si elle est non null.
   * Si une exception SQLException est levée, ne la propage pas.
   */
  public static boolean close(final Statement st) throws SQLException {
    boolean resultat = false;
    if (st != null)
    {
      try
      {
            st.close();
      }
      catch (SQLException exc) {
            System.err.println("Impossible to close statement");
            System.err.println(exc.getMessage());
      }
    }
    return resultat;
  }

  /** Ferme un ResultSet, s'il est non null.
   * Si une exception SQLException est levée, ne la propage pas.
   */
  public static void close(final ResultSet rs) throws SQLException {
    if (rs != null) {
      try {
            rs.close();
      }
      catch (SQLException exc) {
            System.err.println("Impossible to close resultSet");
            System.err.println(exc.getMessage());
      }
    }
  }
}

